#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/msg.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>
#include "cJSON.h"
#include "shmem.h"
#include "pub_define.h"
#include "msg_queue_peer.h"
#include <pthread.h>
#include <sys/time.h>  // 包含 struct timeval 的定义
#include <time.h>      // 包含 time_t 等时间类型的定义
#define BUFFER_SIZE 1024
#define STD_NODE_LEN sizeof(struct std_node)
static struct shm_param para;
union val_t
{
    int b_val;   // bool类型存储空间
    int i_val;   // 整形值存储空间
    float f_val; // 浮点值存储空间
};
struct std_node
{
    int key;             // 唯一键值
    int type;            // 数据点类型
    int dev_type;        // 数据点属于哪个设备，根据网关支持的设备自行定义
    union val_t old_val; // 变化上报后需要更新旧值
    union val_t new_val; // 从共享内存取出最新数据，放到new_val中
    int ret;             // 默认为-1，采集成功后设置为0，采集失败再置-1
};
struct msgbuf
{
    long mtype;      // 消息类型
    int key;
    char mdata[256]; // 消息数据
};
int total_num,stm32_num,modbus_num;
double Past=0;
static int *total;                       // 指向共享内存中数据节点总个数
static struct std_node *node_arr = NULL; // 指向共享内存中节点缓存数组头
static struct std_node *stm32_arr = NULL;   // 指向自己结构体中节点缓存数组头
char IP[128];
int PORT;
void JSON_parse();//解析json文件